package com.cg.design.depthdesign.factorymethod.factory;

import com.cg.design.depthdesign.factorymethod.buttons.Button;

/**
 * 基础创建者
 * <p>
 * 创建者类声明的工厂方法必须返回一个产品类的对象。
 * <p>
 * 创建者的子类通常会提供该方法的实现。
 *
 * @program: LeetCode->Dialog
 * @author: cg
 * @create: 2022-04-05 22:56
 **/
public abstract class Dialog {

    /**
     * 调用工厂方法创建一个产品对象，并使用产品
     */
    public void renderWindow() {
        Button okButton = createButton();
        okButton.render();
    }

    /**
     * 调用工厂方法创建一个产品对象
     * <p>
     * 请注意，创建者的主要职责并非是创建产品。其中通常会包含一些核心业务逻辑，这些逻辑依赖于由工厂方法返回的产品对象。子类可通过重写工厂方法并使其返回不同类型的产品来间接修改业务逻辑。
     *
     * @return
     */
    public abstract Button createButton();

}
